home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / register.h < prev    next >
C/C++ Source or Header  |  2000-09-26  |  4KB  |  211 lines

  1. #ifdef SHAREWARE
  2.  
  3. /* Kundendaten-Struktur */
  4.  
  5. struct Kunde
  6. {
  7.  UBYTE Vorname[50];
  8.  UBYTE Nachname[50];
  9.  UBYTE Straße[50];
  10.  UBYTE Land[4];
  11.  UBYTE Postleitzahl[6];
  12.  UBYTE Ort[50];
  13.  UBYTE Code[32];
  14. } Kunde;
  15.  
  16. UBYTE GetCCode();
  17.  
  18. /* Code eines Strings ermitteln */
  19. UWORD GetStringCode(str,scrambling)
  20.  UBYTE *str;
  21.  UBYTE  scrambling;
  22. {
  23.  UWORD i;
  24.  UWORD code;
  25.  UBYTE q;
  26.  
  27.  code=123;
  28.  for(i=0;i<strlen(str);i++)
  29.   {
  30.    code+=(UWORD)GetCCode(str[i],scrambling);
  31.    scrambling++;
  32.   }
  33.  return(code);
  34. }
  35.  
  36. #asm
  37.    public _GetCCode
  38. _GetCCode:
  39.    move.l d1,-(sp)
  40.    move.l 8(sp),d0
  41.    move.l 12(sp),d1
  42.    ror.b d1,d0
  43.    not.b d0
  44.    bchg #3,d0
  45.    bchg #6,d0
  46.    addq.b #2,d1
  47.    rol.b d1,d0
  48.    not.b d0
  49.    bchg #1,d0
  50.    bchg #4,d0
  51.    ror.b #3,d0
  52.    not.b d0
  53.    ext.w d0
  54.    ext.l d0
  55.    move.l (sp)+,d1
  56.    rts
  57. #endasm
  58.  
  59. #define UP(x) (UBYTE)(toupper(x))
  60.  
  61. UWORD GetHexNum(ch)
  62.  UBYTE ch;
  63. {
  64.  if((UP(ch)>='0') && (UP(ch)<='9')) return((UWORD)(UP(ch)-48));
  65.  if((UP(ch)>='A') && (UP(ch)<='F')) return((UWORD)(UP(ch)-55));
  66.  return(0);
  67. }
  68.  
  69. UWORD TestCode(code,num,a,b,c,d)
  70.  UBYTE *code;
  71.  UWORD  num;
  72.  UWORD  a,b,c,d;
  73. {
  74.  UBYTE c1,c2,c3,c4;
  75.  UBYTE s1[6],s2[6];
  76.  
  77.  c1=tolower(code[a]);
  78.  c2=tolower(code[b]);
  79.  c3=tolower(code[c]);
  80.  c4=tolower(code[d]);
  81.  sprintf(&s1,"%c%c%c%c",c1,c2,c3,c4);
  82.  sprintf(&s2,"%04x",num);
  83.  if(!(strcmp(&s1,&s2)))
  84.   {
  85. #ifdef DEBUG
  86.    printf("Code: okay\n");
  87. #endif
  88.    return(0);
  89.   }
  90. #ifdef DEBUG
  91.    printf("Code: %s statt %s\n",&s2,&s1);
  92. #endif
  93.  return(100);
  94. }
  95.  
  96. UWORD GetCodeCode(code)
  97.  UBYTE *code;
  98. {
  99.  UBYTE s;
  100.  UWORD cd,i;
  101.  
  102.  s=1;
  103.  cd=174;
  104.  for(i=0;i<26;i++)
  105.   {
  106.    cd+=(UWORD)GetCCode(code[i],s);
  107.    s++;
  108.   }
  109. }
  110.  
  111.  
  112. UWORD TestCodeCode(code,cd,a,b,c,d)
  113.  UBYTE *code;
  114.  UWORD  cd;
  115.  UWORD  a,b,c,d;
  116. {
  117.  UBYTE c1,c2,c3,c4;
  118.  UBYTE s1[6],s2[6];
  119.  
  120.  c1=tolower(code[a]);
  121.  c2=tolower(code[b]);
  122.  c3=tolower(code[c]);
  123.  c4=tolower(code[d]);
  124.  sprintf(&s1,"%c%c%c%c",c1,c2,c3,c4);
  125.  sprintf(&s2,"%04x",cd);
  126.  if(!(strcmp(&s1,&s2)))
  127.   {
  128. #ifdef DEBUG
  129.    printf("CodeCheck: okay\n");
  130. #endif
  131.    return(0);
  132.   }
  133. #ifdef DEBUG
  134.    printf("CodeCheck: %s statt %s\n",&s2,&s1);
  135. #endif
  136.  return(100);
  137. }
  138.  
  139. #define VN1 0
  140. #define VN2 1
  141. #define VN3 2
  142. #define VN4 3
  143. #define NN1 4
  144. #define NN2 5
  145. #define NN3 6
  146. #define NN4 7
  147. #define ST1 8
  148. #define ST2 9
  149. #define ST3 10
  150. #define ST4 11
  151. #define LA1 12
  152. #define LA2 13
  153. #define LA3 14
  154. #define LA4 15
  155. #define PL1 16
  156. #define PL2 17
  157. #define PL3 18
  158. #define PL4 19
  159. #define OR1 20
  160. #define OR2 21
  161. #define OR3 22
  162. #define OR4 23
  163. #define S1  24
  164. #define S2  25
  165. /* Code-Kontrolle */
  166. #define CO1 26
  167. #define CO2 27
  168. #define CO3 28
  169. #define CO4 29
  170.  
  171. #define CODE_VN 3
  172. #define CODE_NN 13
  173. #define CODE_ST 7
  174. #define CODE_LA 49
  175. #define CODE_PL 5
  176. #define CODE_OR 2
  177. #define CODE_CODE 54
  178.  
  179. #define PROG_ATKEYBOARD   (1L<<0)
  180. #define PROG_DISKTRANSFER (1L<<1)
  181. #define PROG_FILETRANSFER (1L<<2)
  182. #define PROG_JOYMANAGER   (1L<<3)
  183. #define PROG_PORTSETUP    (1L<<4)
  184. #define PROG_ONLINEHELP   0
  185. #define PROG_UTILITYMAN   0
  186. #define PROG_ATLIB        0
  187.  
  188. #ifndef REGISTER_NOPROGS
  189. #define SYS_COUNT 8
  190. struct Program
  191. {
  192.  UWORD  Code;
  193.  UBYTE *Name;
  194. } Programs[8]={
  195.  PROG_ATKEYBOARD,  "ATKeyboard 3.0",
  196.  PROG_DISKTRANSFER,"ATUtilities Disk Transfer",
  197.  PROG_FILETRANSFER,"ATUtilities File Transfer",
  198.  PROG_JOYMANAGER,  "ATUtilities Joystick Manager",
  199.  PROG_PORTSETUP,   "ATUtilities Port Setup",
  200.  PROG_UTILITYMAN,  "ATUtilities Utility Manager",
  201.  PROG_ONLINEHELP,  "ATUtilities Online Help",
  202.  PROG_ATLIB,       "ATUtilities-Library"
  203. };
  204. #endif
  205.  
  206. #define CHECKSTR(code,str,sc1,sc2) (UWORD)TestCode(code,GetStringCode(str,sc1),sc2,(sc2+1),(sc2+2),(sc2+3))
  207. #define CHECKCODE(code) (UWORD)TestCodeCode(code,GetCodeCode(code),CO1,CO2,CO3,CO4);
  208. #define GETPRG(code) (UWORD)(GetHexNum(code[S1])*16)+GetHexNum(code[S2])
  209. #endif
  210.  
  211.